package dominio;

/*Codigo creado por:
- Francisco Ruiz Romero                         05715573G
- Rosana Rguez-Bobada Aranda            70592974V
Escuela Superior de Inform�tica(ESI) - UCLM
*/

import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;


public class Frontera {

        private PriorityQueue<NodoBusqueda> frontera;
        private long TiempoMAX,TiempoMIN,TiempoTOT;
        private long NodosInsertados;
        
        public Frontera(){
                frontera=new PriorityQueue<NodoBusqueda>(1,Valcomparator);
                TiempoMAX=Long.MIN_VALUE;
                TiempoMIN=Long.MAX_VALUE;
                TiempoTOT=0;
                NodosInsertados=0;
        }
        
        public boolean esVacia(){
                boolean devolver=false;
                if(frontera.size()==0) devolver=true;
                return devolver;
        }
        public void insertarLista(List<NodoBusqueda> l){
                while(l.size()>0){
                        insertarNodo(l.remove(0));
                }
        }
        public void insertarNodo(NodoBusqueda nodo){
                long tiempo_inicial,tiempo_final;
                tiempo_inicial=System.currentTimeMillis();
                frontera.add(nodo);
                tiempo_final=System.currentTimeMillis();
                tiempoNodo(tiempo_inicial,tiempo_final);
                
        }
        
        public NodoBusqueda seleccionarNodo(){
                return frontera.poll();
        }
        
        public void ImprimirFrontera(){//Solo imprime valoraciones
                System.out.print("\n [");
                while(frontera.size()>1){
                        System.out.print(frontera.poll().getValoracion()+ "],[");
                }
                System.out.println(frontera.poll().getValoracion()+"]");
        }
        
        public long nodosInsertados(){
                return NodosInsertados;
        }
        
        //Funciones temporales
        public double TiempoMedio(){
                return (double)(TiempoTOT)/NodosInsertados;
        }
        
        public long TiempoMAX(){
                return TiempoMAX;
        }
        
        public long TiempoMIN(){
                return TiempoMIN;
        }
                
        private void tiempoNodo(long ti,long tf){
                long tiempo_total=tf-ti;
                if(tiempo_total<TiempoMIN){
                        TiempoMIN=tiempo_total;
                }
                if(tiempo_total>TiempoMAX){
                        TiempoMAX=tiempo_total;
                }
                TiempoTOT+=tiempo_total;
                NodosInsertados++;
        }       
        public static Comparator<NodoBusqueda> Valcomparator = new Comparator<NodoBusqueda>(){
        
               
               public int compare(NodoBusqueda n1, NodoBusqueda n2) {
                   return (int) (n1.getValoracion() - n2.getValoracion());
               }
           };
}
